jsoncpp的简易教程 |
您所在的位置:网站首页 › jsoncpp 二维数组 › jsoncpp的简易教程 |
目录Jsoncpp简易教程json简介pairobjectarrayjsoncpp的安装 --建议使用静态库Linux下编译安装Windows下安装和集成到vs项目使用jsoncpp核心介绍jsoncpp解析json从文件中解析json内存中解析json对象内存中解析json数组jsoncpp封装jsonjson封装 简易的演示json封装 内嵌array的objectjson封装 内嵌object的arrayjsoncpp的新式API的使用封装json解析json给json添加字段(其实就是解析再封装)jsoncpp其他常用的api注意事项参考以及转载处
Jsoncpp简易教程
json简介
json中仅支持两种结构: 对象 数组“名称/值”对的集合(A collection of name/value pairs)。一般称为对象(object)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序表,在大部分语言中,它被理解为数组(array)。 你看到的json 要么{}包围,要么[]包围 { 开头说明是个json对象 [ 开头说明 这是个json数组 pair一个pair(键值对)的通常结构是: string : value 键值之间的对应关系使用 : 表示,左边的为key,右边的为value。 一般key使用字符串,当然也可以使用数字,但是建议key只使用字符串。 value的取值就比较随便,可以是任何任何json支持的类型(比如object,array,string,number,true/false,null等)这就为嵌套类型带来了可能。 objectobject可以认为是多个pair的集合。 其语法是以{作为object开始,以}作为object结束,不同的pair之间使用,分割。 需要说明的是object中的数据存储是无序的。(所有你生成的json,在解析打印出来不一定是你生成的json顺序) { "name" : "tocy", "age" : 1000 } arrayarray是value的有序集合。 其语法是以[作为array起始,以]作为array结束,array元素之间使用,分割。 实际使用中建议在array中使用统一的类型,否则解析起来会麻烦点。 // 合法 [{"name":"tocy"}, {"age":1000}, {"domain":"cn"}] // 也合法,但是不方便解析 [1, "ts", true, {"key":45}] jsoncpp的安装 --建议使用静态库 Linux下比较简单。 jsoncpp项目里面有cmake配置文件。安装比较简单。 Windows下比较麻烦点。推荐使用vcpkg安装或者使用VS的nuget安装。 Linux下编译安装 mkdir build && cd build && cmake .. make sudo make install // 如果没有生效 // sudo ldconfig Windows下安装和集成到vs 使用vcpkg ./vcpkg.exe install jsoncpp:x64-windows-static 我使用的静态库 在VS中配置 头文件/库文件路径和链接器的输入文件 jsoncpp.lib 我这里使用的是静态库,如果使用的是动态库还需要在程序的运行目录放入jsoncpp.dll需要注意vcpkg的编译方式(MT/MTd MD/MDd) 静态库是MT/MTd,动态库是后者。 如果vs报错4996,那是因为你使用了旧式的API,使用新式API或者关闭这个错误。 在VS项目配置中 C/C++高级。禁用特定警告输入4996。 但是更加推荐使用新的API来解析和生成json。 项目使用JsonCpp 中所有对象、类名都在 namespace Json 中, 只需要包含 json/json.h 即可。 注意需要链接哦,我是用的cmake target_link_libraries(UseJsoncpp -ljsoncpp) jsoncpp核心介绍JsonCpp 主要包含三种类型的 class: (老式API讲解理论核心并不过时,这里按照老式的来讲,新式api只是为了安全而已) Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。 Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。 Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读) jsoncpp解析json 从文件中解析json真实场景就是当配置文件是json时候 checkjson.json的内容为 { "name" : "tocy", "age" : 1000 }这里面保存的是最简单的object,我们可以使用下面代码将其读入并解析: void parse_from_file() { std::ifstream ifs; ifs.open("/home/tudou/tmp/checkjson.json"); // Windows自己注意路径吧 assert(ifs.is_open()); Json::Reader reader; Json::Value root; // 解析到root,root将包含Json里所有子元素 if (!reader.parse(ifs, root, false)) { cerr |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |